//=============================================================================
/**
 * @file	gf_gx.c
 * @brief	NitroSDKのGXライブラリのラッパー
 * @author	GAME FREAK Inc.
 * @date	2005.11.17
 */
//=============================================================================
#include <standard.h>
#include <nitro.h>
#include "gflib/gf_gx.h"

//=============================================================================
//=============================================================================
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
typedef struct {
	BOOL SwapRequest;		///<SwapBuffersのリクエストフラグ
	GXSortMode am;			///<ソートモード
	GXBufferMode zw;		///<バッファモード
}GF_GX_WORK;

//---------------------------------------------------------------------------
/**
 * @brief	制御用ワーク
 */
//---------------------------------------------------------------------------
static GF_GX_WORK GFGXWork;

//=============================================================================
//=============================================================================
//---------------------------------------------------------------------------
/**
 * @brief	GF_GXシステムの初期化
 */
//---------------------------------------------------------------------------
void GF_GX_Init(void)
{
	memset(&GFGXWork, 0, sizeof(GF_GX_WORK));
	GFGXWork.SwapRequest = FALSE;
}

//---------------------------------------------------------------------------
/**
 * @brief	3D描画処理のためのリセット
 *
 * 各フレームごとの描画処理の最初に呼び出す。
 */
//---------------------------------------------------------------------------
void GF_G3X_Reset(void)
{
	G3X_Reset();
}

//---------------------------------------------------------------------------
/**
 * @brief	3D描画用RAMのスワップリクエスト
 * @param	am		auto sort/manual sort
 * @param	zw		Z buffer/W buffer
 */
//---------------------------------------------------------------------------
void GF_G3_RequestSwapBuffers(GXSortMode am, GXBufferMode zw)
{
	GFGXWork.am = am;
	GFGXWork.zw = zw;
	GFGXWork.SwapRequest = TRUE;
}

//---------------------------------------------------------------------------
/**
 * @brief	3D描画用RAMのスワップ
 *
 * GF_GX_RequestSwapBuffersでリクエストされている場合のみ、動作する
 */
//---------------------------------------------------------------------------
void GF_G3_SwapBuffers(void)
{
	if (GFGXWork.SwapRequest) {
		G3_SwapBuffers(GFGXWork.am, GFGXWork.zw);
		GFGXWork.SwapRequest = FALSE;
	}
}

